#include <iostream>
#include <cstdio>
#include <cassert>
#include <pthread.h>
#include <unistd.h>

using namespace std;

int g_val = 0;
string func()
{
    return "我是一个独立的方法";
}

// 新线程
void *thread_routine(void *args)//整个代码都属于当前进程，只不过把thread_routine这个函数划分给一个新线程执行，这就相当于把资源划分给线程
{
    while (true)
    {
        func();
        cout << "我是新线程, 我正在运行!" << " myname: " << (char *)args << " : " <<func() << " g_val: " << g_val++ << " &g_val: " << &g_val << endl;
        int *p = nullptr;
        *p = 10;
        sleep(1);
    }
}
int main()
{
    pthread_t tid;// typedef unsigned long int pthread_t;
    int n = pthread_create(&tid, nullptr, thread_routine, (void *)"thread one"); // tid是输出型参数，定义的变量tid会被修改
    assert(n == 0);
    (void)n;

    // 主线程，如果当前是一个执行流，则不可能两个死循环同时执行
    while (true)
    {
        char tidbuffer[64];// TID其实是地址

        //可以手动将tidbuffer最后一个位置格式化为\0并且sizeof(tidbuffer)-1，但snprintf(带s系列的C语言输出接口)自动会做这个工作
        snprintf(tidbuffer, sizeof(tidbuffer), "0x%x", tid);
        cout << "我是主线程, 我正在运行! 我创建出来的线程的tid: " << tidbuffer << " : " << func() << " g_val: " << g_val<< " &g_val: " << &g_val <<endl;

        // cout << "我是主线程, 我正在运行! 我创建出来的线程的tid: " << tid << endl;
        sleep(1);
    }
    return 0;
}